﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework;
using Tron.Players;

namespace Tron
{
    public static class Constants
    {
        // The int used to represent an empty block
        public static readonly int EMPTY_BLOCK = -2;

        // The time, in seconds, that a move takes.
        public static readonly double StepDuration = 0.1;

        // The number of rows and columns that the board has.
        // If the board doesn't fit in the window, an exception will be thrown.
        public static readonly int Rows = 40;
        public static readonly int Columns = 40;

        // The width and height of the game window in pixels.
        public static readonly int WindowWidth = 1024;
        public static readonly int WindowHeight = 768;

        // Full screen can show a larger board, but debugging in full screen is difficult
        // without a two-monitor setup.
        public static readonly bool IsFullScreen = false;

        // The name of the custom wall pattern to use.  Wall patterns must be in the Content/Textures/WallPatterns/ folder.
        // If this value is null, no custom wall pattern will be used.
        //public static readonly String WallPattern = "EnhancedReflexAgentTest";
        public static readonly String WallPattern = null;

        // If TurnBased is selected but there is no human player, an exception will be thrown.
        public static readonly GameTypesEnum GameType = GameTypesEnum.Repeat;

        // This value controls have many games are played if the Repeat game type is selected.
        public static readonly int RepeatTimes = 100;

        // All these player option lists must be the same length.  An exception will be thrown if they are not.
        #region Player Options

        // The colors of the players.
        public static readonly List<Color> PlayerColors = new List<Color>()
            {
                Color.Red,
                Color.Gold
            };

        // The player types of the players.
        public static readonly List<PlayerTypesEnum> PlayerTypes = new List<PlayerTypesEnum>()
            {
                PlayerTypesEnum.ReflexAgent,
                PlayerTypesEnum.ReinforcementLearner
            };

        // The starting positions of the players.  These must be legal values (integers and within the bounds of the board).
        // The first and last row and first and last column are reserved for the border walls.  Do not start players there.
        public static readonly List<Vector2> PlayerStartingPositions = new List<Vector2>()
            {
                new Vector2(1,1),
                new Vector2(1,24)
            };

        // The starting directions of the players.  These must be legal values ( one of:(1,0),(-1,0),(0,1),(0,-1) )
        public static readonly List<Vector2> PlayerStartingDirections = new List<Vector2>()
            {
                new Vector2(1,0),
                new Vector2(0, -1)
            };

        // The names of the players (to be displayed).
        public static readonly List<String> PlayerNames = new List<String>()
            {
                "Reflex",
                "Learner"
            };
        #endregion
    }
}
